package lambda;

import java.io.File;
import java.io.FileFilter;

/*
去掉new的接口和方法的定义,然后去掉一个大括号(也可以去掉参数类型)
* JDK8之后java支持了lambda表达式这个特性
 * lambda表达式可以用更精简的语法创建匿名内部类，但是实现的接口只能有一个抽象
 * 方法，否则无法使用。
 * lambda表达式是编译器认可的，最终会被改为内部类形式编译到class文件中。
  编译期：.java源文件,经过编译,生成.class字节码文件
 *运行期:JVM加载.class并运行.class
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 */
public class LambdaDemo {
    public static void main(String[] args) {
        FileFilter filter = new FileFilter() {
            @Override
            public boolean accept(File file) {
                String fileName = file.getName();
                return file.getName().contains("o");
                //return fileName.contains("o");
            }
        };
//lambda表达式特点1：(参数类型也可以不写)
        FileFilter filter1 = (File file)-> {
                return file.getName().contains("o");
        };
        //如果方法体中只有一句代码时,方法体的"{}"可以忽略不写.如果这句代码包含return关键字,那么return关键字也要一同被删除
        FileFilter filter2 = ( file)->file.getName().contains("o");
        //特点3：如果方法的参数只有1个,那么参数列表的"()"可以忽略不写
        FileFilter filter3 = file->file.getName().contains("o");
    }
}
